package servlet;

import model.User;
import model.UserDao;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/login")
public class Login extends HttpServlet {
    // 约定 登录功能使用 post /Login 用户名和密码放在 body 中
    // 使用 form表单 格式： application x-www-form-urlencoded
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 1. 获取请求中的 username 和 password
        req.setCharacterEncoding("utf8");
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        System.out.println("username=" + username + " password=" + password);
        // 2. 验证用户名与密码，检查是否合理
        resp.setContentType("text/html; charset=utf8");
        // 校验 username 和 password
        if(username == null || username.length() == 0 || password == null || password.length() == 0){
            // 用户名或者密码错误，提示用户
            resp.setContentType("text/html; charset=utf8");
            resp.getWriter().write("用户名或者密码为空！");
            return;
        }
        // 3. 与数据库信息比对
        UserDao userDao = new UserDao();
        User user = userDao.getUserByUserName(username);
        if(user == null || !password.equals(user.getPassword())){
            resp.setContentType("text/html; charset=utf8");
            resp.getWriter().write("用户名或密码不正确！");
            return;
        }
        // 4. 登录成功之后创建 session 用于保存用户信息
        //    保存用户信息之前，要先把 password 清空，防止泄露信息
        HttpSession session = req.getSession(true);
        user.setPassword("");
        session.setAttribute("user", user);
        // 5. 用户名和密码正确 重定向到博客列表页
        resp.sendRedirect("blog_list.html");
    }

    // 写一个强制登录的功能
    // 约定 GET /login

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 1. 判断登录状态
        HttpSession session = req.getSession(false);
        //System.out.println("判断用户是否登录");
        if(session == null){
            // 返回用户登录界面
            resp.setStatus(403);
            return;
        }
        // 2. 检查当前登录的用户是否存在
        User user = (User) session.getAttribute("user");
        if(user == null){
            // 返回用户登录界面
            resp.setStatus(403);
            return;
        }
        // 3. 已经是登录状态
        resp.setStatus(200);
    }
}
